'''
给你两个二进制字符串 a 和 b ，以二进制字符串的形式返回它们的和。
示例 1：
输入:a = "11", b = "1"
输出："100"
示例 2：
输入：a = "1010", b = "1011"
输出："10101"
提示：
1 <= a.length, b.length <= 104
a 和 b 仅由字符 '0' 或 '1' 组成
字符串如果不是 "0" ，就不含前导零
'''
class Solution:
    def addBinary(self, a: str, b: str) -> str:
        len_a = len(a)
        len_b = len(b)
        s = ''
        carry = 0   #记录进位
        if len_a > len_b:   #用0补齐短的字符串
            for _ in range(len_a-len_b):
                b = '0' + b
        else:
            for _ in range(len_b-len_a):
                a = '0' + a
        for i in range(len_a-1,-1,-1):  #从后往前遍历
            sum = int(a[i]) + int(b[i]) + carry
            s = str(sum % 2) + s
            carry = sum // 2
        if carry > 0:   #如果最高位还有进位
            s = '1' + s
        return s
#示例
if __name__ == '__main__':
    a,b = "11","1"
    a1,b1 = "1010","1011"
    s = Solution()
    print(s.addBinary(a,b))
    print(s.addBinary(a1,b1))
